const Topic = require('../models/topics')
const User = require('../models/users')
const Question = require('../models/questions')

class TopicsCtl {
    //查找话题列表
    async find(ctx){
        const { per_page = 10 } = ctx.query
        const page = Math.max(ctx.query.page * 1 -1,1)  //从0开始 *1是字符串变成数字
        const perPage = Math.max(per_page * 1,1)
        ctx.body = await Topic
          .find({name: new RegExp(ctx.query.q)})   //mongo的方法  q keyword也行
          .limit(perPage).skip(page*perPage)
          .skip(page*perPage);
        //分页 limit(10).skip(10) 每页10项 跳过前10项
    }
    //话题是否存在
    async checkTopicExist(ctx,next){
        const topic = await Topic.findById(ctx.params.id)
        if(!topic){ ctx.throw(404,'话题不存在') }
        await next();
    }
    //查找话题 根据id
    async findById(ctx){
        const {fields=''} = ctx.query;   //field字段过滤
        const selectFields = fields.split(';').filter(f=>f).map(f => '+' + f).join('');//符合mongoDb的语法的字段
        const topic = await Topic.findById(ctx.params.id).select(selectFields);
        ctx.body = topic;
    }
    //创建话题
    async create(ctx){
        ctx.verifyParams({
            name: {type:'string',required:true},
            avatar_url: {type:'string',required:false},
            introduction: {type:'string',required:false},
        })
        const topic = await new Topic(ctx.request.body).save();
        ctx.body = topic;
    }
    //更新话题
    async update(ctx){
        ctx.verifyParams({
            name: {type:'string',required:false},
            avatar_url:{type:'string',require:false},
            introduction: {type:'string',required:false},
        })
        const topic = await Topic.findByIdAndUpdate(ctx.params.id, ctx.request.body)
        ctx.body = topic;
    }
    //话题的粉丝
    async topicFollowers(ctx){
        //获取用户 following限定条件
        const users = await User.find({ followingTopics: ctx.params.id });
        ctx.body = users;
    }

    //列出问题
    async listQuestions(ctx){
        const questions = await Question.find({topics:ctx.params.id})
        ctx.body = questions;
    }
}

module.exports = new TopicsCtl();